#include"util.hpp"
#include"config.hpp"
#include"data.hpp"
#include"hot.hpp"
#include"service.hpp"
#include<thread>
// void ShowFile(Util::FileUtil f)
// {
//   std::cout << f.FileName()<<std::endl;  
//   std::cout << f.FileSize()<<std::endl;
//   std::cout << f.LastModTime()<<std::endl;
//   std::cout << f.LastAccTime()<<std::endl;
// }
// void CopyFile(Util::FileUtil f,const std::string& cfname)
// {
//   std::string content;
//   f.GetContent(&content);
//   Util::FileUtil cf(cfname);
//   cf.SetContent(content);
// }

// void CompriseFile(const std::string& packagedname,const std::string& filename)
// {

//   Util::FileUtil packed(filename);
//   packed.Compress(packagedname);

//   Util::FileUtil unpacked(packagedname);
//   unpacked.UnCompress("text.cc");


// }

// void OpDirector(const std::string& director)
// {
//   Util::FileUtil dir(director);
//   std::vector<std::string> arry;
//   dir.ScanDirectory(&arry);
//   for(auto& fn : arry)
//   {
//     std::cout<<fn<<std::endl;
//   }
//   dir.Exists();
//   Util::FileUtil ndir("test");
//   ndir.CreateDirectory();
// }
// void JsonUtil()
// {
//   Json::Value root;
//   const char* name = "xiaoming";
//   int age = 92;
//   float score[3] = {90.5,80,85.5};
//   root["name"]=name;
//   root["age"] = age;
//   root["sorce"].append(score[0]);
//   root["sorce"].append(score[1]);
//   root["sorce"].append(score[2]);
//   std::string ser;
//   Util::JsonUtil::Serialize(root,&ser);
//   std::cout << ser<<std::endl;
//   Json::Value unser;
//   Util::JsonUtil::UnSerialize(&unser,ser);
//   std::cout << unser["name"].asString() << std::endl;
//   std::cout << unser["age"].asInt()<<std::endl;
//   std::cout << unser["sorce"][0].asFloat()<<std::endl;
//   std::cout << unser["sorce"][1].asFloat()<<std::endl;
//   std::cout << unser["sorce"][2].asFloat()<<std::endl;
// }
// void Configtest()
// {
//   cloud::Config* conf = cloud::Config::GetInstance();
//   std::cout << conf->GetHotTime() << std::endl;
//   std::cout << conf->GetServerPort() << std::endl;
//   std::cout << conf->GetServerIp() << std::endl;
//   std::cout << conf->GetDownloadPrefix() << std::endl;
//   std::cout << conf->GetPackDileSuffix() << std::endl;
//   std::cout << conf->GetPackDir() << std::endl;
//   std::cout << conf->GetBackDir() << std::endl;
//   std::cout << conf->GetBackupFile() << std::endl;
// }

// void Datatest(const std::string real_path)
// {
//   // cloud::BackupInfo finfo(real_path);
//   // cloud::DataManager data;
//   // data.Inseet(finfo);

//   // cloud::BackupInfo tmp;
//   // std::cout <<"GetOneByRealPath-----------------------"<<std::endl;
//   // data.GetOneByRealPath(real_path,&tmp);
//   // std::cout << tmp.pack_flag<<std::endl;
//   // std::cout << tmp.fsize<<std::endl;
//   // std::cout << tmp.atime<<std::endl;
//   // std::cout << tmp.mtime<<std::endl;
//   // std::cout << tmp.real_path<<std::endl;
//   // std::cout << tmp.pack_path<<std::endl;
//   // std::cout << tmp.url<<std::endl;
//   // std::cout <<"GetURL-------------------------------"<<std::endl;
//   // tmp.pack_flag = true;
//   // data.Update(tmp);
//   // data.GetOneByURL(tmp.url,&tmp);
//   // std::cout << tmp.pack_flag<<std::endl;
//   // std::cout << tmp.fsize<<std::endl;
//   // std::cout << tmp.atime<<std::endl;
//   // std::cout << tmp.mtime<<std::endl;
//   // std::cout << tmp.real_path<<std::endl;
//   // std::cout << tmp.pack_path<<std::endl;
//   // std::cout << tmp.url<<std::endl;
//   // std::cout <<"GetAll-------------------------------"<<std::endl;
//   // tmp.url = "123123123";
//   // tmp.real_path = "987987987";
//   // data.Inseet(tmp);
//   // std::vector<cloud::BackupInfo> v;
//   // data.GetAll(&v);
//   // for(auto it : v)
//   // {
//   //     std::cout << it.pack_flag<<std::endl;
//   //     std::cout << it.fsize<<std::endl;
//   //     std::cout << it.atime<<std::endl;
//   //     std::cout << it.mtime<<std::endl;
//   //     std::cout << it.real_path<<std::endl;
//   //     std::cout << it.pack_path<<std::endl;
//   //     std::cout << it.url<<std::endl;
//   // }
//   // data.Storage();


//   cloud::DataManager data;
//   std::vector<cloud::BackupInfo> v;
//   data.GetAll(&v);
//   for(auto it : v)
//   {
//       std::cout << it.pack_flag<<std::endl;
//       std::cout << it.fsize<<std::endl;
//       std::cout << it.atime<<std::endl;
//       std::cout << it.mtime<<std::endl;
//       std::cout << it.real_path<<std::endl;
//       std::cout << it.pack_path<<std::endl;
//       std::cout << it.url<<std::endl;
//   }
// }
cloud::DataManager* data;
void Hottest()
{
  cloud::HotManager hm;
  hm.RunModule();
}



void ServiceTest()
{
  cloud::Service s;
  s.RunModule();
}
int main(int argc, char* argv[])
{
  data = new cloud::DataManager();
  
  //ShowFile(std::string(argv[1]));
  // CopyFile(std::string(argv[1]),argv[2]);
  //CompriseFile(argv[1],argv[2]);
  //OpDirector(argv[1]);
  //JsonUtil();
  // Configtest();
  //Datatest(argv[1]);
  //Hottest();
  std::thread thread_hot(Hottest);
  std::thread thread_service(ServiceTest);

  thread_hot.join();
  thread_service.join();
  return 0;
}
